﻿using System;
using System.Collections.Generic;

namespace RiskCalc.Modelo
{
    public class Acao
    {
        public string Nome;
        public int Quantidade;
        public double Posicao;
        public double Media;
        public double DesvioPadrao;
        public double VarParametrico;
        
        public List<Dado> VetDados;

        public Acao()
        {
            this.VetDados = new List<Dado>();
        }

        public void calcularMedia()
        {
            this.Media = Calculos.mediaAritmetica(this.VetDados.ConvertAll(new Converter<Dado, double>(Dado.DadoParaRetornoGeometrico)));
        }

        public void calcularDesvioPadrao()
        {
            this.DesvioPadrao = Calculos.desvioPadrao(
                                Calculos.variancia(Media,
                                this.VetDados.ConvertAll(new Converter<Dado, double>(Dado.DadoParaRetornoGeometrico))));
        }

        public void calcularPosicao()
        {
            if (this.Nome.Equals("IBOVESPA"))
            {
                Posicao = this.Quantidade * Carteira.getInstance().valorAcaoIbovespa;
            }
            else
            {
                Posicao = this.Quantidade * this.VetDados[0].Valor;
            }
        }

        // CARREGAR APENAS O <janelaDias> ULTIMOS pelo select
        // FAZER ORDERBY DATETIME ASC
        public void calcularRetornosGeometricos()
        {
            for (int i = this.VetDados.Count - 2; i >= 0; i--)
            {
                VetDados[i].RetornoGeometrico = Calculos.retornoGeometrico(VetDados[i + 1].Valor, VetDados[i].Valor);
            }
        }

        public void calcularVarParametrico(double confianca)
        {
            this.VarParametrico = Calculos.varParametrico(this.Posicao, this.DesvioPadrao, this.Media, confianca);
        }

        public override string ToString()
        {
            return this.Nome + " - " + this.Quantidade + " - " + this.Posicao;
        }
    }
}